import { IPSDataEntity } from '../ipsdata-entity';
import { IPSDataEntityObject } from '../ipsdata-entity-object';
import { IPSSysSFPlugin } from '../../res/ipssys-sfplugin';
import { IPSSubSysServiceAPI } from '../../service/ipssub-sys-service-api';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSDEUtil
 */
export interface IPSDEUtil extends IPSDataEntityObject {
  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  get psSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口（必须存在）
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPIMust(): IPSSubSysServiceAPI;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件
   *
   * @type {IPSSysSFPlugin}
   */
  get psSysSFPlugin(): IPSSysSFPlugin | null;

  /**
   * 后台扩展插件（必须存在）
   *
   * @type {IPSSysSFPlugin}
   */
  getPSSysSFPluginMust(): IPSSysSFPlugin;

  /**
   * 功能实体
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE(): IPSDataEntity | null;

  /**
   * 功能实体
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE(): IPSDataEntity | null;

  /**
   * 功能实体（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDEMust(): IPSDataEntity;

  /**
   * 功能实体10
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE10(): IPSDataEntity | null;

  /**
   * 功能实体10
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE10(): IPSDataEntity | null;

  /**
   * 功能实体10（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE10Must(): IPSDataEntity;

  /**
   * 功能实体10名称
   * @type {string}
   */
  utilPSDE10Name: string;

  /**
   * 功能实体11
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE11(): IPSDataEntity | null;

  /**
   * 功能实体11
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE11(): IPSDataEntity | null;

  /**
   * 功能实体11（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE11Must(): IPSDataEntity;

  /**
   * 功能实体12
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE12(): IPSDataEntity | null;

  /**
   * 功能实体12
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE12(): IPSDataEntity | null;

  /**
   * 功能实体12（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE12Must(): IPSDataEntity;

  /**
   * 功能实体13
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE13(): IPSDataEntity | null;

  /**
   * 功能实体13
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE13(): IPSDataEntity | null;

  /**
   * 功能实体13（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE13Must(): IPSDataEntity;

  /**
   * 功能实体14
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE14(): IPSDataEntity | null;

  /**
   * 功能实体14
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE14(): IPSDataEntity | null;

  /**
   * 功能实体14（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE14Must(): IPSDataEntity;

  /**
   * 功能实体15
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE15(): IPSDataEntity | null;

  /**
   * 功能实体15
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE15(): IPSDataEntity | null;

  /**
   * 功能实体15（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE15Must(): IPSDataEntity;

  /**
   * 功能实体16
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE16(): IPSDataEntity | null;

  /**
   * 功能实体16
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE16(): IPSDataEntity | null;

  /**
   * 功能实体16（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE16Must(): IPSDataEntity;

  /**
   * 功能实体17
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE17(): IPSDataEntity | null;

  /**
   * 功能实体17
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE17(): IPSDataEntity | null;

  /**
   * 功能实体17（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE17Must(): IPSDataEntity;

  /**
   * 功能实体18
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE18(): IPSDataEntity | null;

  /**
   * 功能实体18
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE18(): IPSDataEntity | null;

  /**
   * 功能实体18（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE18Must(): IPSDataEntity;

  /**
   * 功能实体19
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE19(): IPSDataEntity | null;

  /**
   * 功能实体19
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE19(): IPSDataEntity | null;

  /**
   * 功能实体19（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE19Must(): IPSDataEntity;

  /**
   * 功能实体2
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE2(): IPSDataEntity | null;

  /**
   * 功能实体2
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE2(): IPSDataEntity | null;

  /**
   * 功能实体2（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE2Must(): IPSDataEntity;

  /**
   * 功能实体20
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE20(): IPSDataEntity | null;

  /**
   * 功能实体20
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE20(): IPSDataEntity | null;

  /**
   * 功能实体20（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE20Must(): IPSDataEntity;

  /**
   * 功能实体2名称
   * @type {string}
   */
  utilPSDE2Name: string;

  /**
   * 功能实体3
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE3(): IPSDataEntity | null;

  /**
   * 功能实体3
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE3(): IPSDataEntity | null;

  /**
   * 功能实体3（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE3Must(): IPSDataEntity;

  /**
   * 功能实体3名称
   * @type {string}
   */
  utilPSDE3Name: string;

  /**
   * 功能实体4
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE4(): IPSDataEntity | null;

  /**
   * 功能实体4
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE4(): IPSDataEntity | null;

  /**
   * 功能实体4（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE4Must(): IPSDataEntity;

  /**
   * 功能实体4名称
   * @type {string}
   */
  utilPSDE4Name: string;

  /**
   * 功能实体5
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE5(): IPSDataEntity | null;

  /**
   * 功能实体5
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE5(): IPSDataEntity | null;

  /**
   * 功能实体5（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE5Must(): IPSDataEntity;

  /**
   * 功能实体5名称
   * @type {string}
   */
  utilPSDE5Name: string;

  /**
   * 功能实体6
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE6(): IPSDataEntity | null;

  /**
   * 功能实体6
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE6(): IPSDataEntity | null;

  /**
   * 功能实体6（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE6Must(): IPSDataEntity;

  /**
   * 功能实体6名称
   * @type {string}
   */
  utilPSDE6Name: string;

  /**
   * 功能实体7
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE7(): IPSDataEntity | null;

  /**
   * 功能实体7
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE7(): IPSDataEntity | null;

  /**
   * 功能实体7（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE7Must(): IPSDataEntity;

  /**
   * 功能实体7名称
   * @type {string}
   */
  utilPSDE7Name: string;

  /**
   * 功能实体8
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE8(): IPSDataEntity | null;

  /**
   * 功能实体8
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE8(): IPSDataEntity | null;

  /**
   * 功能实体8（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE8Must(): IPSDataEntity;

  /**
   * 功能实体8名称
   * @type {string}
   */
  utilPSDE8Name: string;

  /**
   * 功能实体9
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE9(): IPSDataEntity | null;

  /**
   * 功能实体9
   *
   * @type {IPSDataEntity}
   */
  get utilPSDE9(): IPSDataEntity | null;

  /**
   * 功能实体9（必须存在）
   *
   * @type {IPSDataEntity}
   */
  getUtilPSDE9Must(): IPSDataEntity;

  /**
   * 功能实体9名称
   * @type {string}
   */
  utilPSDE9Name: string;

  /**
   * 功能实体名称
   * @type {string}
   */
  utilPSDEName: string;

  /**
   * 动态功能参数集合
   * @type {IModel}
   */
  utilParams: IModel;

  /**
   * 功能标记
   * @type {string}
   */
  utilTag: string;

  /**
   * 功能标记2
   * @type {string}
   */
  utilTag2: string;

  /**
   * 功能类型
   * @description 值模式 [实体功能配置类型] {DATAAUDIT：数据审计、 DYNASTORAGE：动态存储、 USER：用户自定义 }
   * @type {( string | 'DATAAUDIT' | 'DYNASTORAGE' | 'USER')}
   */
  utilType: string | 'DATAAUDIT' | 'DYNASTORAGE' | 'USER';
}
